package com.shihb.homework

/**
 * Description:
 * 现有一些商品，请使用scala设计相关的样例类，完成商品捆绑销售。
 * 商品捆绑可以是单个商品页可以是多个商品
 * 打折时按照折扣X元进行设计
 * 能够统计出所有捆绑商品打折后的最终价格
 *
 * @author shihb
 * @date 2020/10/1 0:33
 */
object SaleDemo {
  // 知识点
  def test: Unit = {
    val sale: Bundle = Bundle("书籍", 10.0,
      Book("漫画", 40.0),
      Bundle("文学作品", 20.0, Book("阳关", 80), Book("围城", 30)))
    // 知识点1 如何拿到"漫画" _表示忽略一个,_*表示忽略所有
    val res1: String = sale match {
      case Bundle(_, _, Book(desc, _), _*) => desc
    }
    println(res1)
    // 知识点2 @表示将嵌套的值绑定到变量
    val res2 = sale match {
      case Bundle(_, _, art@Book(_,_),rest @ _*) => (art,rest)
    }
    println(res2)
  }

  def main(args: Array[String]): Unit = {
    // 这里给出了一个具体打折的案例
    val sale: Bundle = Bundle("书籍", 10.0,
      Book("漫画", 40.0),
      Bundle("文学作品", 20.0, Book("阳关", 80), Book("围城", 30)))
    println(price(sale))

  }
  def price(it:Item):Double={
    it match {
      case Book(_,price)=>price
      case Bundle(_,discount,items @ _*)=>items.map(price).sum-discount
    }
  }

}

// 设计样例类
abstract class Item

case class Book(desc: String, price: Double) extends Item

// Bundle捆 discount 折扣,items
case class Bundle(desc: String, discount: Double, items: Item*) extends Item
